home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 4 / United Public Domain Gold 4.iso / fredfish / ff.0231.dms / ff.0231.adf / Plot / Source / plot.c < prev    next >
C/C++ Source or Header  |  1989-07-23  |  16KB  |  571 lines

  1. /* Intuition Interface for Plot Program */
  2.  
  3.  
  4. #include "plot.h"
  5.  
  6.  
  7. struct TextFont *tf;
  8. FILE *fp1;
  9. char Editor[50]= "ed";
  10.  
  11.  
  12.  
  13. main()
  14. {
  15. void OpenAll(), Work(), CloseDown();
  16.  
  17.   OpenAll();
  18.   Work();
  19.   CloseDown();
  20.   return(0);
  21. }
  22.  
  23.  
  24. void OpenAll()       /*   open libraries, screen, and window   */
  25. {
  26.  
  27. void DrawScreen(), FixPlotTypeGadgets(), ReadDef();
  28.  
  29.   DosBase = (struct DosBase *)
  30.           OpenLibrary("dos.library",0);
  31.   if( DosBase == NULL ) exit(10);
  32.  
  33.   DiskfontBase = (struct DiskfontBase *)
  34.           OpenLibrary("diskfont.library",0);
  35.   if( DiskfontBase == NULL )  exit(10);
  36.  
  37.   IntuitionBase = (struct IntuitionBase *)
  38.           OpenLibrary("intuition.library",0);
  39.   if( IntuitionBase == NULL )  exit(10);
  40.  
  41.   GfxBase = (struct GfxBase *)
  42.           OpenLibrary("graphics.library",0);
  43.   if( GfxBase == NULL )  exit(10);
  44.  
  45.   tf=(struct TextFont *) OpenDiskFont(&gfont);
  46.   ReadDef();
  47.   if( (p_Window = (struct Window *)OpenWindow(&Window))==NULL) exit(10);
  48.  
  49.   FixPlotTypeGadgets();
  50.   SetMenuStrip(p_Window,&Menu1);
  51.   r = p_Window->RPort;
  52.   PrintIText(r,&IText5,0,0);
  53. }
  54.  
  55. void Work()
  56. {
  57. struct IntuiMessage  *p_message;         /* pointer to message */
  58. void ProcMes();
  59.  
  60.   while (QuitFlag !=QUIT)
  61.     {
  62.        Wait(1l<<p_Window->UserPort->mp_SigBit);        /* wait for a message */
  63.        while (p_message = (struct IntuiMessage *)GetMsg(p_Window->UserPort))
  64.          ProcMes(p_message);
  65.      }
  66. }
  67.  
  68.  
  69. void ProcMes(p_message)
  70. struct IntuiMessage *p_message;
  71. {
  72. ULONG MesClass;        /*     Fields for storing      */
  73. USHORT MesCode;        /*     intuimessage data       */
  74. APTR Pointer;          /*                             */
  75. void HandleEvent();
  76.  
  77.    MesClass = p_message->Class;             /* Store values */
  78.    MesCode = p_message->Code;
  79.    Pointer = p_message->IAddress;
  80.    ReplyMsg(p_message);                     /* Reply to message */
  81.    HandleEvent(MesClass,MesCode,Pointer);
  82. }
  83.  
  84. char Command[200];
  85. char String[50];
  86. char     def_name[100] = "FileName";
  87. char     def_dir[50] = "PLOT:Data/";
  88.  
  89.  
  90.  
  91. void HandleEvent(MesClass,MesCode,Pointer)
  92. ULONG MesClass;        /*     Fields for storing      */
  93. USHORT MesCode;        /*     intuimessage data       */
  94. APTR Pointer;          /*                             */
  95. {
  96. void FileReq(), GadMXSel(), DrawScreen(), Edit(), ShowAdvert();
  97. void SaveDef(), DefineEditor(), LoadDef(), print_err();
  98. BPTR Monitor;
  99. unsigned M0, I0, S0;   /* Menu control index */
  100.  
  101.  
  102.   if ( MesClass == CLOSEWINDOW)      QuitFlag=QUIT;
  103.   if ( MesClass == REFRESHWINDOW)    DrawScreen();
  104.   if ( MesClass == MENUPICK) {
  105.     if( MesCode != MENUNULL)
  106.      {
  107.         M0 = MENUNUM(MesCode);
  108.         I0 = ITEMNUM(MesCode);
  109.         S0 = SUBNUM(MesCode);
  110.  
  111.       switch (M0) {
  112.       case 0 :
  113.         switch (I0) {
  114.         case 0 :  FileReq(); break;
  115.         case 1 :  LoadDef(); break;
  116.         case 2 :  SaveDef(); break;             /* save defaults */
  117.         case 3 :  ShowAdvert(); break;             /* About window  */
  118.         case 4 :  QuitFlag=QUIT; break;
  119.         default :
  120.           print_err("Menu selection reached default in Project menu\n");
  121.           break;
  122.         }
  123.         break;
  124.       case 1 :
  125.         switch (I0) {
  126.           case 0 : DefineEditor(); break;
  127.           case 1 : Edit(); break;
  128.         default :
  129.           print_err("Menu selection reached default in Edit menu\n");
  130.           break;
  131.         }
  132.         break;
  133.       case 2 :
  134.         switch (I0) {
  135.           case 0 :  Form=AEGIS; break;
  136.           case 1 :  Form=INTRO; break;
  137.           case 2 :  Form=MCAD; break;
  138.         default :
  139.           print_err("Menu selection reached default in Form menu\n");
  140.           break;
  141.         }
  142.         break;
  143.       default :
  144.         print_err("Menu selection reached default menu\n");
  145.         break;
  146.       }
  147.      }
  148.   }
  149.  
  150.   if ( MesClass == GADGETDOWN)
  151.     {
  152.  
  153.       if (Pointer == (APTR)&PathButton) FileReq();
  154.  
  155.       if (Pointer == (APTR)&Switch1)
  156.         {
  157.            GadMXSel(p_Window,&Switch1,&Switch4,NULL,NULL,NULL,NULL);
  158.            NET=ON;
  159.         }
  160.       if (Pointer == (APTR)&Switch4)
  161.         {
  162.            GadMXSel(p_Window,&Switch4,&Switch1,NULL,NULL,NULL,NULL);
  163.            NET=OFF;
  164.         }
  165.       if (Pointer == (APTR)&Switch2)
  166.         {
  167.            GadMXSel(p_Window,&Switch2,&Switch5,NULL,NULL,NULL,NULL);
  168.            AXES=ON;
  169.         }
  170.       if (Pointer == (APTR)&Switch5)
  171.         {
  172.            GadMXSel(p_Window,&Switch5,&Switch2,NULL,NULL,NULL,NULL);
  173.            AXES=OFF;
  174.         }
  175.       if (Pointer == (APTR)&Switch3)
  176.         {
  177.            GadMXSel(p_Window,&Switch3,&Switch6,NULL,NULL,NULL,NULL);
  178.            TWOSIDES=ON;
  179.         }
  180.       if (Pointer == (APTR)&Switch6)
  181.         {
  182.            GadMXSel(p_Window,&Switch6,&Switch3,NULL,NULL,NULL,NULL);
  183.            TWOSIDES=OFF;
  184.         }
  185.       if (Pointer == (APTR)&Plot3DButton)
  186.         {
  187.            GadMXSel(p_Window,&Plot3DButton,&Plot2DButton,NULL,NULL,NULL,NULL);
  188.            PlotType=PLOT3D;
  189.         }
  190.       if (Pointer == (APTR)&Plot2DButton)
  191.         {
  192.            GadMXSel(p_Window,&Plot2DButton,&Plot3DButton,NULL,NULL,NULL,NULL);
  193.            PlotType=PLOT2D;
  194.         }
  195.       if (Pointer == (APTR)&Button0)
  196.         {
  197.            GadMXSel(p_Window,&Button0,&Button1,&Button2,&Button3,NULL,NULL);
  198.            x=1;
  199.         }
  200.       if (Pointer == (APTR)&Button1)
  201.         {
  202.            GadMXSel(p_Window,&Button1,&Button0,&Button2,&Button3,NULL,NULL);
  203.            x=2;
  204.         }
  205.       if (Pointer == (APTR)&Button2)
  206.         {
  207.            GadMXSel(p_Window,&Button2,&Button0,&Button1,&Button3,NULL,NULL);
  208.            x=3;
  209.         }
  210.       if (Pointer == (APTR)&Button3)
  211.         {
  212.            GadMXSel(p_Window,&Button3,&Button0,&Button1,&Button2,NULL,NULL);
  213.            x=0;
  214.         }
  215.       if (Pointer == (APTR)&Button4)
  216.         {
  217.            GadMXSel(p_Window,&Button4,&Button5,&Button6,&Button7,NULL,NULL);
  218.            y=1;
  219.         }
  220.       if (Pointer == (APTR)&Button5)
  221.         {
  222.            GadMXSel(p_Window,&Button5,&Button4,&Button6,&Button7,NULL,NULL);
  223.            y=2;
  224.         }
  225.       if (Pointer == (APTR)&Button6)
  226.         {
  227.            GadMXSel(p_Window,&Button6,&Button4,&Button5,&Button7,NULL,NULL);
  228.            y=3;
  229.         }
  230.       if (Pointer == (APTR)&Button7)
  231.         {
  232.            GadMXSel(p_Window,&Button7,&Button4,&Button5,&Button6,NULL,NULL);
  233.            y=0;
  234.         }
  235.       if (Pointer == (APTR)&Button8)
  236.         {
  237.            GadMXSel(p_Window,&Button8,&Button9,&Button10,&Button11,NULL,NULL);
  238.            e=1;
  239.         }
  240.       if (Pointer == (APTR)&Button9)
  241.         {
  242.            GadMXSel(p_Window,&Button9,&Button8,&Button10,&Button11,NULL,NULL);
  243.            e=2;
  244.         }
  245.       if (Pointer == (APTR)&Button10)
  246.         {
  247.            GadMXSel(p_Window,&Button10,&Button8,&Button9,&Button11,NULL,NULL);
  248.            e=3;
  249.         }
  250.       if (Pointer == (APTR)&Button11)
  251.         {
  252.            GadMXSel(p_Window,&Button11,&Button8,&Button9,&Button10,NULL,NULL);
  253.            e=0;
  254.         }
  255.       if (Pointer == (APTR)&StartButton)
  256.         {
  257.           if ((PlotType==PLOT2D)&&(CheckFile()!=NULL))
  258.             {
  259.              sprintf(Command,"copy %s t:plotfile \n Plot:Multiplot -x%dy%de%d t:plotfile \n endcli",FileNameSIBuff,x,y,e);
  260.              Monitor=Open("CON:0/46/640/120/How To",MODE_NEWFILE);
  261.              SetPointer(p_Window,WaitSprite,38,16,-4,-4);
  262.              Execute(Command,Monitor,0);
  263.              Close(Monitor);
  264.              DrawScreen();
  265.              DeleteFile("t:plotfile");
  266.              if (Form==INTRO) sprintf(Command,"Plot:txt_2_icad t:plotfile.txt0 %s.cad",FileNameSIBuff);
  267.              if (Form==AEGIS) sprintf(Command,"Plot:plot2draw t:plotfile.txt0 %s.draw",FileNameSIBuff);
  268.              if (Form==MCAD) sprintf(Command,"Plot:plot2mcad t:plotfile.txt0 %s.mcad",FileNameSIBuff);
  269.              Execute(Command,0,0);
  270.              DeleteFile("t:plotfile.txt0");
  271.              ClearPointer(p_Window);
  272.             }
  273.           if ((PlotType==PLOT3D)&&(CheckFile()!=NULL))
  274.             {
  275.              stpcpy(String,"");
  276.              if (NET==OFF) strcat(String,"-n ");
  277.              if (AXES==OFF) strcat(String,"-a ");
  278.              if (TWOSIDES==ON) strcat(String,"-2 ");
  279.              sprintf(Command,"copy %s t:plotfile \n cd t: \n Plot:dat_2_bin t:plotfile \n Plot:threedplot %st2f.out \n endcli",FileNameSIBuff,String);
  280.              Monitor=Open("CON:0/46/640/120/     ThreeDPlot...    <<  Calculating Screen Image  >>     Please Wait   .",MODE_NEWFILE);
  281.              SetPointer(p_Window,WaitSprite,38,16,-4,-4);
  282.              Execute(Command,Monitor,0);
  283.              Close(Monitor);
  284.              DrawScreen();
  285.              DeleteFile("t:plotfile");
  286.              DeleteFile("t:t2f.out");
  287.              sprintf(Command,"Plot:txt_2_icad t:threedplot.txt %s.cad",FileNameSIBuff);
  288.              Execute(Command,0,0);
  289.              DeleteFile("t:threedplot.txt");
  290.              ClearPointer(p_Window);
  291.            }
  292.         }
  293.       if (Pointer == (APTR)&EditButton)  Edit();
  294.  
  295.      }
  296. }
  297.  
  298.  
  299. void Edit()
  300.  {
  301.    if  ((CheckFile()!=NULL) || AutoRequest(p_Window,&NewFileText1,&NewFileText2,&NewFileText3,NULL,NULL,320,70))
  302.       {
  303.           sprintf(Command,"%s %s",Editor,FileNameSIBuff);
  304.           Execute(Command,0,0);
  305.           DrawScreen();
  306.       }
  307.  }
  308.  
  309. void FileReq()
  310. {
  311. struct Process  *OurTask;
  312. struct Window   *old_pr_WindowPtr;
  313.  
  314.            OurTask = (struct Process *)FindTask(0L);
  315.            old_pr_WindowPtr = OurTask->pr_WindowPtr;
  316.            OurTask->pr_WindowPtr = p_Window;
  317.            get_fname(p_Window,p_Screen,"Select Data File",def_name,def_dir);
  318.            OurTask->pr_WindowPtr = old_pr_WindowPtr;
  319.            RemoveGadget(p_Window,&FileName);
  320.            stpcpy(FileNameSIBuff,"");
  321.            strmfp(FileNameSIBuff,def_dir,def_name);
  322.            AddGadget(p_Window,&FileName,-1);
  323.            RefreshGadgets(&FileName,p_Window,NULL);
  324.            DrawBorder(r,&Border3,198,50);
  325. }
  326.  
  327.  
  328. /**
  329. *
  330. *   This routine selects gad1 and deselects the previously selected one.
  331. *   Maximum number of gadgets to be mutually excluded is six, obviously.
  332. *   Extension to more gadgets is obvious, too. This routine assumes that
  333. *   only one gadget is selected at a time.
  334. *
  335. **/
  336.  
  337. void GadMXSel(win,gad1,gad2,gad3,gad4,gad5,gad6)
  338. struct Window *win;
  339. struct Gadget *gad1,*gad2,*gad3,*gad4,*gad5,*gad6;
  340. {
  341. void GadMXSD();
  342. static struct Gadget *gadprev;
  343.  
  344.    gadprev = NULL;
  345.    if (gad1 != NULL)
  346.       if (gad1->Flags & SELECTED) return;
  347.    if (gad2 != NULL)
  348.       if (gad2->Flags & SELECTED) gadprev = gad2;
  349.    if (gad3 != NULL)
  350.       if (gad3->Flags & SELECTED) gadprev = gad3;
  351.    if (gad4 != NULL)
  352.       if (gad4->Flags & SELECTED) gadprev = gad4;
  353.    if (gad5 != NULL)
  354.       if (gad5->Flags & SELECTED) gadprev = gad5;
  355.    if (gad6 != NULL)
  356.       if (gad6->Flags & SELECTED) gadprev = gad6;
  357.  
  358.    GadMXSD(win,gad1,gadprev);
  359.  
  360.    return;
  361. }
  362.  
  363. /**
  364. *
  365. *   This routine selects gad1 and deselects gad2.
  366. *   Notice, that this version removes gadgets from the gadget list and adds
  367. *   them to the end. If you're sensitive to the location of the gadgets
  368. *   in the gadgetlist, you have to use: gadloc = RemoveGadget... and
  369. *   AddGadget(...,...,(long) gadloc), where gadloc is a USHORT. Then you
  370. *   have to refresh all gadgets to make sure the two you changed get
  371. *   refreshed.
  372. *
  373. **/
  374. void GadMXSD(win,gad1,gad2)
  375. struct Window *win;
  376. struct Gadget *gad1,*gad2;
  377. {
  378. /*
  379. *   First select gad2 (yes!) and refresh.
  380. */
  381.    if (gad2 != NULL) {
  382.       RemoveGadget(win,gad2);
  383.       gad2->Flags |= SELECTED;
  384.       AddGadget(win,gad2,-1L);
  385.    }
  386.  
  387.    if (gad2 != NULL) RefreshGadgets(gad2,win,NULL);
  388. /*
  389. *   Now select gad1 and deselect gad2 and refresh.
  390. */
  391.    if (gad1 != NULL) {
  392.       RemoveGadget(win,gad1);
  393.       gad1->Flags |= SELECTED;
  394.       AddGadget(win,gad1,-1L);
  395.    }
  396.  
  397.    if (gad2 != NULL) {
  398.       RemoveGadget(win,gad2);
  399.       gad2->Flags &= ~SELECTED;
  400.       AddGadget(win,gad2,-1L);
  401.    }
  402.  
  403.    if (gad1 != NULL) RefreshGadgets(gad1,win,NULL);
  404.  
  405.    return;
  406. }
  407.  
  408. void DrawScreen()
  409. {
  410.   BeginRefresh(p_Window);
  411.   PrintIText(r,&IText5,0,0);
  412.   EndRefresh(p_Window,TRUE);
  413. }
  414.  
  415. void ShowAdvert()
  416. {
  417.     AutoRequest(p_Window,&AText1,NULL,&AText6,NULL,NULL,328,94);
  418.     AutoRequest(p_Window,&A2Text1,NULL,&AText6,NULL,NULL,328,94);
  419.  
  420. }
  421.  
  422.  
  423. void DefineEditor()
  424. {
  425. USHORT EdQuitFlag, UseFlag;
  426. ULONG EdMesClass;                          /*     Fields for storing      */
  427. APTR EdPointer;                            /*                             */
  428. struct IntuiMessage  *p_Edmessage;         /*      pointer to message     */
  429. void print_err();
  430.  
  431.   EdQuitFlag=GO;
  432.   UseFlag=OFF;
  433.   stpcpy(EdSIBuff,Editor);
  434.   if( (p_EdWindow = (struct Window *)OpenWindow(&EdWindow))==NULL)
  435.     {
  436.     print_err("Unable to open define editor window");
  437.     exit(10);
  438.     }
  439.   p = p_EdWindow->RPort;
  440.   PrintIText(p,&WText3,0,0);
  441.   while (EdQuitFlag !=QUIT)
  442.     {
  443.        Wait(1l<<p_EdWindow->UserPort->mp_SigBit);        /* wait for a message */
  444.        while (p_Edmessage = (struct IntuiMessage *)GetMsg(p_EdWindow->UserPort))
  445.         {
  446.           EdMesClass = p_Edmessage->Class;             /* Store values */
  447.           EdPointer = p_Edmessage->IAddress;
  448.           ReplyMsg(p_Edmessage);                     /* Reply to message */
  449.           if ( EdMesClass == GADGETDOWN)
  450.            {
  451.              if (EdPointer == (APTR)&WGadget2)
  452.                {
  453.                 EdQuitFlag=QUIT;
  454.                 UseFlag=ON;
  455.                }
  456.              if (EdPointer == (APTR)&WGadget3)
  457.                {
  458.                 EdQuitFlag=QUIT;
  459.                }
  460.            }
  461.         }
  462.     }
  463.    CloseWindow(p_EdWindow);
  464.    if (UseFlag==ON) stpcpy(Editor,EdSIBuff);
  465. }
  466.  
  467. void FixPlotTypeGadgets()
  468. {
  469.       if (PlotType==PLOT3D)
  470.            GadMXSel(p_Window,&Plot3DButton,&Plot2DButton,NULL,NULL,NULL,NULL);
  471.       if (PlotType == PLOT2D)
  472.            GadMXSel(p_Window,&Plot2DButton,&Plot3DButton,NULL,NULL,NULL,NULL);
  473. }
  474.  
  475.  
  476. void LoadDef()
  477. {
  478. void ReadDef();
  479.   ClearMenuStrip(p_Window);
  480.   ReadDef();
  481.   FixPlotTypeGadgets();
  482.   SetMenuStrip(p_Window,&Menu1);
  483. }
  484.  
  485.  
  486. void ReadDef()
  487. {
  488. int a,b;
  489.  
  490.    fp1 = NULL;
  491.    fp1 = fopen("plot.def","r");
  492.    if (fp1==NULL) fp1 = fopen("s:plot.def","r");
  493.    if (fp1!=NULL)
  494.       {
  495.          fscanf(fp1,"%d %d",&a,&b);
  496.          fgets(Editor,50,fp1);
  497.          fclose(fp1);
  498.          if (a==INTRO)
  499.            {
  500.               MenuItem2.Flags= CHECKED+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP;
  501.               MenuItem3.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP;
  502.               MenuItem1.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP;
  503.            }
  504.          else if (a==MCAD)
  505.            {
  506.               MenuItem3.Flags= CHECKED+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP;
  507.               MenuItem2.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP;
  508.               MenuItem1.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP;
  509.            }
  510.          else
  511.            {
  512.               MenuItem1.Flags= CHECKED+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP;
  513.               MenuItem2.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP;
  514.               MenuItem3.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP;
  515.            }
  516.  
  517.            Form=a;
  518.            PlotType=b;
  519.         }
  520.  
  521. }
  522.  
  523.  
  524. void SaveDef()
  525. {
  526.    fp1 = fopen("s:plot.def","w");
  527.    if (fp1!=NULL)
  528.       {
  529.          fprintf(fp1,"%d %d %s",Form,PlotType,Editor);
  530.          fclose(fp1);
  531.       }
  532. }
  533.  
  534. CheckFile()
  535. {
  536. BPTR lock;
  537.  
  538.     lock=Lock(FileNameSIBuff,ACCESS_READ);
  539.     if (lock!=NULL)
  540.       {
  541.         UnLock(lock);
  542.         return(1);
  543.       }
  544.     AutoRequest(p_Window,&FileCheckText1,&FileCheckText2,&FileCheckText3,NULL,NULL,320,70);
  545.     return(0);
  546. }
  547.  
  548. void print_err(message)
  549. char message[];
  550. {
  551. SetWindowTitles(p_Window,message,NULL);
  552. Delay(200);
  553. SetWindowTitles(p_Window,Window.Title,NULL);
  554. }
  555.  
  556. void CloseDown()
  557. {
  558.   CloseFont(tf);
  559.   ClearMenuStrip(p_Window);
  560.   CloseWindow(p_Window);       /* close window */
  561.   CloseLibrary(IntuitionBase);
  562.   CloseLibrary(DosBase);
  563.   CloseLibrary(DiskfontBase);
  564.   CloseLibrary(GfxBase);
  565.   exit(TRUE);                /* Good Bye */
  566. }
  567.  
  568.  
  569.  
  570.  
  571.